#include <typeinfo>

#ifndef _RELEASE_HPP_
#define _RELEASE_HPP_
template <typename T> struct Cleaner {
	static void clean(T x) {
#ifdef _DEBUG
		static int n = 0;
		printf("\t<%s>[%d]", typeid(T).name, ++n);
#endif
	}
};

template <typename T> struct Cleaner<T *> {
	static void clean(T * p) {
		delete p;
	}
};

template <class T> void release(T x) {
	Cleaner<T>::clean(x);
}
#endif